package com.wt.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

/**
 * redis的操作类
 * @author lidong
 *
 */
public class RedisAction {

	//获取redis的连接池中的对象
	private static JedisPool pool = RedisPool.jedisPool;
	private static Jedis jedis = null;
	
	
	/**
	 * 保存对象
	 * @param key 保存对象的key
	 * @param value 保存对象的值
	 * @param time 失效时间 如果时间为0  失效时间为默认时间 单位:秒s
	 */
	public static void save(String key,String value,int time){
		try {
			jedis = pool.getResource();
			jedis.set(key,value);
			if(time > 0){
				jedis.expire(key, time);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			pool.returnBrokenResource(jedis);
		}
	}
	/**
	 * 保存对象(重载)
	 * @param key 保存对象的key
	 * @param Object 保存对象
	 * @param time 失效时间 如果时间为0  失效时间为默认时间
	 */
	public static void save(String key,Object obj,int time){
		try {
			jedis = pool.getResource();
			jedis.set(key,JSON.toJSONString(obj));
			if(time > 0){
				jedis.expire(key, time);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			pool.returnBrokenResource(jedis);
		}
	}
	
	/**
	 * 修改value值
	 * @param key 修改对象的key
	 * @param obj 修改值
	 */
	public static void update(String key,String value){
		try {
			Long time = jedis.ttl(key);
			jedis = pool.getResource();
			jedis.set(key,value);
			jedis.expire(key, Integer.parseInt(String.valueOf(time)));
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			pool.returnBrokenResource(jedis);
		}
	}
	
	/**
	 * 修改value值(重载)
	 * @param key 修改对象的key
	 * @param obj 修改值
	 */
	public static void update(String key,Object obj){
		try {
			Long time = jedis.ttl(key);
			jedis = pool.getResource();
			jedis.set(key,JSON.toJSONString(obj));
			jedis.expire(key, Integer.parseInt(String.valueOf(time)));
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			pool.returnBrokenResource(jedis);
		}
	}
	
	/**
	 * 修改redis失效时间
	 * @param key 修改对象的key
	 * @param time 重置的失效时间
	 */
	public static void setTime(String key,int time){
		try {
			jedis.expire(key, time);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			pool.returnBrokenResource(jedis);
		}
	}
	
	/**
	 * 获取redis中的某个对象
	 * @param key 唯一标识
	 * @param clazz 对象的全路径
	 * @return Object对象(需要强转)
	 */
	@SuppressWarnings("unchecked")
	public static Object get(String key,Class clazz){
//		Json json = new Json();
		try {
			jedis = pool.getResource();
			String result = jedis.get(key);
			Object obj = JSONObject.parseObject(result, clazz);
//			json.setObj(obj);
//			json.setSuccess(true);
			return obj;
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			pool.returnResource(jedis);
		}
		return null;
	}
	
	/**
	 * 获取单个对象
	 * @param key 对象的唯一标识
	 * @return 对象json字符串
	 */
	public static String get(String key){
		try {
			jedis = pool.getResource();
			String result = jedis.get(key);
			return result;
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			pool.returnResource(jedis);
		}
		return null;
	}
	
	/**
 	 * 删除redis中信息
 	 * @param key  对象的唯一标识
 	 */
 	public static void del(String key){
 		try{
 			jedis = pool.getResource();
        	jedis.del(key);
 		} catch (Exception e) {
			e.printStackTrace();
		}
    	finally {
    		pool.returnResource(jedis);
		}
 	}
 	/**
 	 * 获取redis的失效时间
 	 * @param key  对象的唯一标识
 	 * @return
 	 */
 	public static Long gettime(String key){
		try {
			jedis = pool.getResource();
			Long time = jedis.ttl(key);
			return time;
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			pool.returnBrokenResource(jedis);
		}
		return null;
	}
}
